home *** CD-ROM | disk | FTP | other *** search
-
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- こB 簡易マニュアル
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-
-
- こB は基本的に X-BASIC/ぺけ-BASIC と同じですので、文法的な解説は
- X-BASIC のマニュアルに譲り、このマニュアルでは、特に X-BASIC との相違
- 点に主眼を置いて記すこととします。
-
- ですから X-BASIC をご存じでない方は、X-BASIC のマニュアルで勉強して
- から、またおいで頂かなくてはなりません。
-
-
- なお、'Ko>' のマークは、Cで Ko-Window のプログラムを作ったことのあ
- る方向けに、「Cとはどう違うか」「こB内部ではどう処理しているか」を短
- くあらわしたものです。
-
-
-
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- 目次
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-
- こBのインストール
- こBの起動
- こBのコンフィグファイル
- こBの外部関数
- こBで使える X-BASIC の機能
- こB独自の機能
- こBで拡張されたシステム変数
- こBで装備されたウィンドウ関数
- こBのイベント
-
-
-
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- こBのインストール
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-
- このアーカイブに含まれている
-
- kob.win
- kob.cnf
- ped.fnc
- zmdfnc.fnc
-
- の 4つのファイルをパスを通したディレクトリに置いてください。
- また、一緒に含まれているドキュメント類も、都合の良いディレクトリにコ
- ピーしておいた方が良いでしょう。
-
- 続いて、X-BASIC や ぺけ-BASIC に付属している外部関数も同じディレクト
- リに置きます。それらを用意しなくとも最低限の動作はしますが、多くの こ
- B対応ソフトはそれらの外部関数を必要としていますので、不可欠と言えるで
- しょう。
- X-BASIC の外部関数は、もちろん本体付属のシステムディスクから、ぺけ
- -BASIC 付属の外部関数は、ぺけ-BASIC を別途入手して下さい。
- 具体的にどのような外部関数が必要かは、後の「こBの外部関数」の節を参
- 照下さい。
-
- すでに X-BASIC ないし ぺけ-BASIC を使用している場合は、その同じディ
- レクトリに kob.win 達を置くだけで良いでしょう。
- X-BASIC や ぺけ-BASIC を使用なさっていない場合も、出来るだけ専用のデ
- ィレクトリを作成することをお勧めします。
-
-
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- こBの起動
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-
- Console 等から、
-
- kob.win (option1)(プログラム名)(option2)
-
- で起動します。
-
-
- プログラム名の拡張子が省略されたら、.kob をつけて探します。
-
- プログラムの形式は、プログラムを先頭から記したテキスト形式で、行番号
- の有無は問いません。また空行などが存在しても構いません。
- また、アルファベットの大文字・小文字は区別されますので御注意下さい。
-
-
- option1 は、こB本体に与えるオプション列です。以下の物が使用出来ます。
-
- -f[num] フリーエリアの大きさを KB 単位で指定する。デフォ
- ルトで 128KB。
- -c[cnf file name]
- こBの読み込むコンフィグファイル名を指定します。
- デフォルトでは、こBの起動ディレクトリにある
- kob.cnf です。
- -e[deilDEIL] こBの拡張機能の ON/OFF を指定します。アルファ
- ベットの大文字で ON、小文字で OFF です。
- 各文字の意味は「こBのコンフィグファイル」を御
- 覧下さい。
-
- -x[num] ウィンドウを開く X座標
- -y[num] Y座標
- -h[num] ウィンドウの横幅
- -v[num] 縦幅
-
- -x, -y, -h, -v で指定した値は、プログラム内から WINX 等のシステム変
- 数によって参照出来ます。
-
-
- option2 は、こBプログラムに与えるオプション列です。
- b_argc, b_argv() を使って、参照します。
-
-
-
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- こBのコンフィグファイル
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-
-
- コンフィグファイルは起動時に読み込まれ、フリーエリアの大きさや組み込
- む外部関数などを指定します。
-
- デフォルトでは、kob.win と同じディレクトリに存在する kob.cnf ですが、
- オプション -c により、他のファイルを指定することも可能です。その際には、
- こBプログラム名よりも前で指定しなければなりません。
-
- kob.cnf は例えば次のような構成になっています。
-
- FREE = 128
- WIDTH = 96
- BEEP = ON
- CAPS = OFF
- WARN = ON
- *EXTEND = DEIL
- FUNC = stick
- FUNC = MUSICZ
- FUNC = PED
- FUNC = ZMDFNC
- *FUNC = DOSFNC
-
- これに見る通り、
-
- 命令 = 引き数列
-
- という形式で記述することになっています。
- また、行の先頭に *(アスタリスク)を置くと注釈と見なされます。
- それでは、個々の命令について説明します。
-
-
- ==== FREE
-
- BASIC プログラムで使用するフリーエリアの大きさをキロバイト単位で設定
- します。
- 省略した場合、128 (KB) となります。
-
-
- ==== WIDTH,BEEP,CAPS
-
- これらの命令は無視されます。
-
-
- ==== FUNC
-
- 組み込む外部関数をファイル名から拡張子 .FNC を略した形で指定します。
- 1命令につき指定出来る外部関数は1つなので、指定する外部関数の個数だ
- けの FUNC 命令を書く必要があります。
-
-
- ==== WARN
-
- ワーニングを出力するかどうかを ON, OFF で設定します。
- ON でワーニングを出力し、OFF で抑えます。
- 省略した場合、WARN = ON となります。
-
-
- ==== EXTEND
-
- 拡張機能を使用するかどうかを、各機能ごとにアルファベット1文字で設定
- します。
- アルファベットと拡張機能との対応は以下の通りです。
-
- D : func で定義する関数の引き数に配列を使用出来る
- E : 配列の定義時に、非定数の添え字の最大値を使用出来る
- I : 関数呼び出し時に、変数や配列を初期化しない
- L : goto の飛び先にラベルを使用出来る
-
- でも、拡張機能って言っても、こBはオリジナルのインタプリタなのでした
- ……まあ、いいや。
-
-
-
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- こBの外部関数
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-
-
- こBでは X-BASIC/ぺけ-BASIC 用の外部関数が基本的にそのまま使用可能で
- す。ただし、Ko-Window のサーバーの処理とぶつかる物 ( MOUSE.FNC など )
- はその限りではありません。
-
-
- ☆ 使って良い X-BASIC/ぺけ-BASIC 用外部関数 ☆
-
- AUDIO.FNC X-BASIC に付属
- IMAGE.FNC
- MUSIC.FNC
- STICK.FNC
-
- DOSFNC.FNC ぺけ-BASIC に付属
- IOCSFNC.FNC
- LZHFNC.FNC
-
- MUSICZ.FNC Z-MUSIC に付属
-
-
-
- ----------------------------------------------------------------------
- 外部関数のインターフェースは X-BASIC 互換ですが、一
- 部拡張されています。
- 具体的には、レジスタ a3,a4 に以下のような情報が渡さ
- れています。
-
- ・ a3 = WindowID 列
-
- (a3+ 0) : ウィンドウ #0 の WindowID
- (a3+ 4) : ウィンドウ #1 の WindowID
- (a3+ 8) : ウィンドウ #2 の WindowID
- : :
- (a3+60) : ウィンドウ#15 の WindowID
-
-
- ・ a4 = こB内部のサブルーチンエントリ列
- (a4+ 0) : WindowDraw( )
- (a4+ 4) : (reserve)
- (a4+ 8) : (reserve)
- : :
- ----------------------------------------------------------------------
-
-
-
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- こBで使える X-BASIC の機能
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-
-
- こBの文法および演算記号などは X-BASIC と全く同じです。
- 各命令・関数には若干の違いがあります。
-
- 以下に書いてある物は、基本的に X-BASIC のものと全く同様の機能として
- 使えます。
- label のみは ぺけ-BASIC 固有の機能です。
-
-
- ・ステートメント
-
- (変数定義関係)
- dim
- int/float/char/str
-
- (分岐・ループ処理関係)
- if/then/else
- for/next
- while/endwhile
- repeat/until
- switch/endswitch
- goto(/label)
-
- (プログラム関数関係)
- func/endfunc
- return
-
-
- ・システム変数
- free
- date$
- day$
- time$
-
- ・標準関数
- 全て使えるはずです
-
-
- これら以外の機能を使用するとエラーになります。
-
-
-
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- こB独自の機能
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-
-
- X-BASIC のと同じ名前であるが、機能が異なる物は以下の通りです。
-
-
- ・ print
-
- 文法は X-BASIC と全く同様ですが( using も使用可能)、 Console ウィ
- ンドウ への出力となります。
- Console が存在しない場合は無視されます。
- プログラム内のパラメーターの表示など、主にプログラムのデバッグ用に使
- 用されるものです。
- ウィンドウへの文字の表示には DrawSymbol() 関数を使用します
- (kofunc.doc 参照)。
-
-
- ・ end/exit()
-
- こBの初期設定グローバルルーチンの終了を意味します。
- プログラムの終了ではありません。
- プログラムの終了には、外部から Close イベントを送る( Close ボックス
- をクリックする等)か、ステートメント exit() を実行して下さい。
-
-
- ・ screen
-
- 画面モードの変更、という意味では同じですが、パラメータは一つだけ、そ
- の意味は以下の通りです。
-
- screen [num]
- [num] = 0 : 256x256
- 1 : 384x256
- 2 : 512x512
- 3 : 768x512
- 4 : 704x424
- 5 : 1024x424
- 6 : 1024x848
- 7 : 800x526
-
-
-
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- こBで拡張されたシステム変数
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-
-
- ・WINX, WINY, WINH, WINV
-
- 起動時のオプションで指定された値を参照することが出来ます。
- ウィンドウをオープンする時にこの値を使えば、コマンドラインからウィン
- ドウ位置を指定することの出来るアプリになります。
- オプションが省略された場合、それぞれ 10, 10, 0, 0 が入っています。
- 代入は出来ません。
-
-
- ・ITIME
-
- インターバルイベント Einterval() が呼び出される間隔を 1/100 秒単位で
- 指定します。
- デフォルトは ITIME=100 (1秒単位)です。
- 代入して、値を変更することが出来ます。
- ITIME に負の値を代入しておけば、インターバルイベントは発生しなくなり
- ます。
- なお、インターバルイベントについては、あとの記述を参照して下さい。
-
-
- ・info_??
-
- イベントが呼び出される時の情報が収められている auto システム変数です。
- 読み込み・書き込みともに可能です。ただし、呼び出されたイベント関数内で
- のみアクセス可能です。
- 全部で次に挙げる 16 種類あります。
-
- info_x, info_y, info_h, info_v, info_Rstat, info_Lstat, info_Lon,
- info_Loff, info_Ron, info_Roff, info_MoveFlag, info_KeyCode,
- info_ShiftStat, info_Counter, info_ComData
-
- 起きたイベントにより各変数の意味が異なるので、個々の内容は後のイベン
- トの解説に譲ります。
-
-
-
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- こBで装備されたウィンドウ関数
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-
-
- こBは「ウィンドウ関数」と呼ばれる以下の関数群を標準で装備しています。
-
- WindowOpen, WindowSimpleOpen, WindowTitleOpen,
- WindowClose, WindowPop, WindowPush, WindowRedraw, WindowMove,
- WindowResize, WindowGetPosition, WindowGetSize
-
- WindowMoveOperation, WindowResizeOperation
-
- PopUpMenu, IconEnt
-
- WindowLoadExec, UserSendExec, SendUserString, SendUserSheet,
- SendUserGraphic, GetUserString, GetUserSheet, GetUserGraphic,
-
- DrawClear, DrawLine, DrawBox, DrawFill, DrawShadow,
- DrawSymbol, DrawPut
-
- GraphicInit, DrawGraphicClear, DrawGraphicLine,
- DrawGraphicBox, DrawGraphicFill, DrawGraphicShadow,
- DrawGraphicPut
-
- TrumpOpen, JpaiOpen, TrumpClose, JpaiClose, DrawCard,
- DrawMonoCard
-
- IntervalTime
-
-
- これらは、文字通りウィンドウを操作するための関数達です。個々の詳しい
- 仕様は、 kofunc.doc を参照下さい。
-
- 操作するウィンドウを指定するには、「ウィンドウナンバー」という 0 か
- ら始まる整数を使います。
- こB上で使用されるウィンドウは、固有の「ウィンドウナンバー」を持って
- います。これにより、「0番のウィンドウをクリアせよ」という命令を出すこ
- とができます。
-
- 現在、こBは全部で 16枚までのウィンドウを開くことが出来ますので、ウィ
- ンドウナンバーは 0 から 15 までです。
-
-
- Ko> こBはポインタを持っていないので、こういう形での実装となりました。
- Ko> 具体的には、ClientData にウィンドウナンバーを書き込んであります。
-
-
-
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- こBのイベント
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-
-
- こBで生じるイベントは、次の 13個です。
-
-
- Eopen 最初のオープン時に一回だけ呼び出される
- Eredraw ウィンドウを再描画する必要が生じた時呼び出される
- Eclose クローズボタン等が押された時に呼び出される
- Emove ウィンドウを移動させようとした時呼び出される
- Eresize ウィンドウをリサイズしようとした時呼び出される
- Eiconify ウィンドウをアイコン化しようとした時呼び出される
- Emouse マウスのクリックが有った時に呼び出される
- Emouse_move ウィンドウ内でマウスカーソルが動いた時呼び出される
- Emouse_enter ウィンドウ内にマウスカーソルが入ってきた時呼び出される
- Emouse_out ウィンドウからマウスカーソルが出た時呼び出される
- Ekey キーボードが押された時に呼び出される
- Einterval 指定の時間ごとに呼び出される
- Euser 外部からデータが転送された時に呼び出される
-
-
- イベントは、func ~ endfunc で定義するプログラムの関数として記述しま
- す。これを「イベント関数」と呼びます。イベント関数名は上に挙げた一覧表
- の左に書かれている名前を使用します。
-
-
- 各のイベントの情報は、info_?? という形のシステム変数で渡されます。
-
-
- プログラムでは、必ず int 型の引き数(ウィンドウナンバー)を一つ指定
- して下さい。指定がない場合はエラーとなります。
-
- 例:
- ----------------------------------------------------------------------
- func Eredraw( wno ) /* wno 番のウィンドウに redraw が発生した
- ----------------------------------------------------------------------
-
-
- イベント関数を終了する時に、0 を返すとデフォルトの処理が実行されます。
- 1 を返すと、デフォルトの処理が登録されていても、それは実行されません。
- 返り値を省略した場合にも、デフォルトの処理は実行されません( 1が返さ
- れる)。
-
- 例:
- ----------------------------------------------------------------------
- func Emouse( wno )
- if info_Lon=0 then return(0) /* 左クリックされてなかったら
- /* デフォルトの処理実行
- ----------------------------------------------------------------------
-
- この例の場合、右クリックで標準のポップアップメニューを出す、というデ
- フォルトの処理が実行されるでしょう。
-
-
-
- 以下に、個々のイベントを解説します。
-
-
- ================================
- func Eopen( wno )
- ================================
-
- ウィンドウが最初にオープンした時に一回だけ呼び出されます。
- info_x, info_y にウインドウの左上座標、info_h, info_v にウインドウの
- 大きさが入っています。
- 各ウィンドウごとの初期設定を行い、WindowRedraw() を発行するためのイ
- ベントですが、通常必要な処理はこBの内部で行うので、ほとんどの場合省略
- します。
-
-
- Ko> デフォルト処理で、WindowRedraw()を発行します。
-
-
- ================================
- func Eredraw( wno )
- ================================
-
- 他のウィンドウの下敷きになっていたりなどしていたものが表に現れること
- で、再描画する必要が生じた時に呼び出されます。
- info_x, info_y に描き直し領域の左上座標、info_h, info_v に描き直し領
- 域の大きさが入っています。
-
- 通常は、ウィンドウサーバが勝手にクリッピングしてくれるので、ウィンド
- ウ全体を描き直せば良いです。
- 描き直しが複雑になって時間がかかる場合には、渡された情報を使って描き
- 直し領域を最小にすると、大変レスポンスが良くなります。
-
- このイベント関数を省略すると、おもしろすぎるので、省略してはいけませ
- ん。
-
-
- ================================
- func Eclose( wno )
- ================================
-
- クローズボタンが押されたり、ポップアップメニューから Close を選んだ
- 時などに呼び出されます。
- 渡される情報はありません。
- 省略した場合、こBが開いていたウィンドウを全て閉じ、プログラムの実行
- を終了します。
-
-
- 例:ある条件が成立していなかったら、終了しない
- ----------------------------------------------------------------------
- func Eclose( wno )
- if flag then return(0) /* デフォルトの処理(プログラム終了)実行
- return(1) /* デフォルトの処理実行しない
- endfunc
- ----------------------------------------------------------------------
-
- Ko> デフォルトでは、こBの確保したメモリを開放した後
- Ko> WindowConnectionClose() を実行します。
-
-
-
- ================================
- func Emove( wno )
- ================================
-
- ウィンドウを移動させようとした時、つまりタイトルバーをドラッグした時
- や、メニューから 'move' を選んで位置を決めた時に呼び出されます。
- システム変数 info_x, info_y に移動先の座標が入っています。
- 0 を返した場合のデフォルトの処理は「指定の位置に移動」です。
-
- info_x, info_y の値を変更して 0 ( = デフォルトの処理を実行) を返せば、
- 移動先の制御が可能です。
- 下のように 1 ( = デフォルトの処理を実行しない) を返すだけのイベント
- 関数を作るとウィンドウの移動を禁止できます。
-
- ----------------------------------------------------------------------
- func Emove( wno )
- return(1)
- endfunc
- ----------------------------------------------------------------------
-
- Emove() の記述を省略した場合、自動的に移動処理を行います。
-
-
-
- ================================
- func Eresize( wno )
- ================================
-
- ウィンドウをリサイズしようとした時に呼び出されます。
- システム変数 info_x, info_y にリサイズの左上の座標が、 info_h,
- info_v にリサイズされた大きさが入っています。
- 0 を返した場合のデフォルトの処理は「指定のサイズに変更」です。
-
- info_x, info_y, info_h, info_v の値を変更して 0 ( = デフォルトの処理
- を実行) を返せば、リサイズの制御が可能です。
- Emove() と同様に 1 ( = デフォルトの処理を実行しない)を返すだけのイ
- ベント関数を作るとウィンドウのリサイズを禁止できます。
-
- Eresize() の記述を省略した場合、自動的にリサイズを行います。
-
-
-
- ================================
- func Eiconify( wno )
- ================================
-
- ウィンドウをアイコン化しようとした時、つまりアイコンボックスをクリ
- ックした時などに呼び出されます。
- 省略した場合、自動的にアイコン化を行います。その際のアイコン名は勝手
- に 'icon' となってしまいますので、きちんと自前の処理を書いたほうがよい
- でしょう。
- Emove() と同様に 1 ( = デフォルトの処理を実行しない)を返すだけのイ
- ベント関数を作るとウィンドウのアイコン化を禁止できます。
-
-
-
- ================================
- func Emouse( wno )
- ================================
-
- マウスのボタンを押した時、離した時、押したままマウスを移動した時に呼
- び出されます。
- info_x, info_y にマウスの座標が、info_Lstat, info_Rstat に左右のボタ
- ンの状態が(押していたら 1、離していたら 0)入っています。
- また、info_Lon, info_Ron は左右それぞれが「押された瞬間」、
- info_Loff, info_Roff は「離された瞬間」のみ 1になります。
- info_MoveFlag には、マウスを押したまま移動させた場合に 1が入ります。
-
- デフォルトの処理で、右クリックでポップアップメニューが出ます(正確に
- は、これは microwm.win の機能)。
-
-
-
- ================================
- func Emouse_move( wno )
- func Emouse_enter( wno )
- func Emouse_out( wno )
- ================================
-
- それぞれウィンドウ内でマウスカーソルが動いた時、ウィンドウにマウスカ
- ーソルが入ってきた時、ウィンドウからマウスカーソルが出た時に呼ばれます。
- Emouse_move() では、 システム変数 info_x, info_y にマウスカーソルの
- ローカル座標が入っています。
-
-
-
- ================================
- func Ekey( wno )
- ================================
-
- ウィンドウ上でキーボードが押された時に呼び出されます。
- info_KeyCode に入力されたキーコードが、info_ShiftStat にシフトキーの
- 状態が入ります。
-
-
-
- ================================
- func Einterval( wno )
- ================================
-
- 指定の時間ごとに呼び出されます。時間の間隔はシステム変数 ITIME で指
- 定します。 ITIME が正の値の時は ITIME/100 秒毎に呼び出され、負の値の時
- は呼び出されません。
-
- Ko> 実際には、0 番のウィンドウの EventInterval は常に発生状態にあっ
- Ko> て、こB内部で Einterval() を呼ぶかどうかを処理してます。
-
- このイベントはウィンドウナンバー 0 のウィンドウにのみ発生します。従っ
- て wno は常に 0 です。
- Einterval() を発生させたい場合は、必ず 0 番のウィンドウを開くようし
- て下さい。逆に、Einterval() が必要ない場合には 0 番を使用しないようす
- れば、サーバーへの負担を少し減らす事が出来るでしょう。
-
- 渡される情報はありません。
-
-
-
- ================================
- func Euser( wno )
- ================================
-
- 他のウィンドウからのデータの転送があった場合に呼び出されます。
- 具体的には、
-
- ・ String : 文字列やファイル名
- ・ Sheet : Sheet データ(モノクロ画像)
- ・ Graphic : Graphic データ( 16/256/65536色画像)
-
- の3つのデータを受け取ることが出来ます。
-
- info_ComData に、上の3種類のデータのいずれが転送されたのかが入って
- います。
-
- info_ComData = 0,1,2 : String
- = 3 : Sheet
- = 5 : Graphic
-
- 3種類のデータはそれぞれ受け取り方法が異なります。詳しくは関数リファ
- レンス kofunc.doc の GetUserString(), GetUserSheet(), GetUserGraphic()
- 関数の項を参照下さい。
-
-
-
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- 平成 8年 11月 11日 中 谷 秀 洋
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- (EoF)
-